package de.hm.edu.kinderfinder.location;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.Log;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;

/**
 * Diese Klasse repräsentiert den Zirkelradius um einen Punkt. Sie ist ebenso
 * dafür verantwortlich diesen Radius auf der vorgegebenen Mapview zu zeichnen.
 * 
 * @author souljah
 * 
 */
public class CircleOverlay extends Overlay {

	Context context;
	double mLat;
	double mLon;
	int radius;

	/**
	 * Konstruktor für einen gezeichneten Radius in dem die Attribute festgelegt
	 * werden.
	 * 
	 * @param _context
	 *            der aufzurufenden Activity.
	 * @param _lat
	 *            Latitude des Mittelpunktes.
	 * @param _lon
	 *            longitude des Mittelpunktes.
	 * @param radius
	 */
	public CircleOverlay(Context _context, double _lat, double _lon, int radius) {
		context = _context;
		mLat = _lat;
		mLon = _lon;
		this.radius = radius;
	}

	/**
	 * Vorgegebene Methode die für das Zeichnen auf einer Mapview implementiert
	 * werden muss
	 * 
	 * @param Canvas
	 *            ist die Ebene auf der gezeichnet werden soll
	 * @param Mapview
	 *            auf der der Radius erscheinen soll.
	 * @param shadow
	 *            ob das gezeichnete Objekt einen Schatten werfen soll.
	 */
	public void draw(Canvas canvas, MapView mapView, boolean shadow) {

		super.draw(canvas, mapView, shadow);

		Projection projection = mapView.getProjection();

		Point pt = new Point();

		GeoPoint geo = new GeoPoint((int) (mLat * 1e6), (int) (mLon * 1e6));

		projection.toPixels(geo, pt);

		float circleRadius = projection.metersToEquatorPixels(radius) * 1.45f;

		Paint innerCirclePaint;

		innerCirclePaint = new Paint();
		innerCirclePaint.setARGB(50, 100, 30, 255);
		innerCirclePaint.setAntiAlias(true);
		innerCirclePaint.setStrokeWidth(10);

		innerCirclePaint.setStyle(Paint.Style.STROKE);

		canvas.drawCircle((float) pt.x, (float) pt.y, circleRadius,
				innerCirclePaint);
	}

	public void setRadius(int radius) {
		this.radius = radius;
	}
}